/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package kpython.backend.semantic;

import java.util.HashMap;
import java.util.Map;

/**
 * Representa um simbolo existente no programa a compilar
 * 
 * @author Dinis
 */
public class Symbol {

    /**
	 * Cont�m todos os s�mbolos do programa a compilar
	 */
	private static Map<String, Symbol> table = new HashMap<String, Symbol>();
	
	/**
	 * Identificador do s�mbolo
	 */
	private String lexeme;   
        
	/**
	 * Construtor
	 * 
	 * @param l
	 */
	private Symbol(String l) {
		lexeme = l;
	} 

	/**
	 * retorna a representa��o textual do s�mbolo
	 */
	@Override
	public String toString() {
		return lexeme;
	}

	/**
	 * Retorna um simbolo corresponde ao identificador dado. Caso o
	 * simbolo ja exista vai busc�-lo � tabela e retorna-o, caso n�o
	 * exista, cria um, coloca na tabela e retorna-o
	 * @param n
	 * @return
	 */
	public static Symbol getSymbol(String n) {

		Symbol s = table.get(n);
		if (s == null) { 

			s = new Symbol(n);
			table.put(n, s);
		}
		return s;
	}
	
	 

}
